iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Python

一些Python可以做的事系列 第 4

[Python] 批量更改檔案名稱和轉檔

  • 分享至 

  • xImage
  •  

今天整理相簿時候,突然發現這些照片檔名都很雜亂,我就在想要如何一次整理這些照片,不然一張一張改不知道要改到何時,這篇就來介紹如何批量更改檔名

批量更改檔案名稱方法 :

使用 Python 的 os 與 glob 標準函式庫

步驟 :
  1. 首先使用 glob 讀取 pic 資料夾裡所有的檔案
  2. 取得檔名後,接著使用 os 函式庫的 rename 方法,搭配 for 迴圈,就能一次更改所有照片名稱
程式碼 :
import glob
import os
images = glob.glob('../pic/*')

n = 1          # 設定名稱從 1 開始
for i in images:
    os.rename(i, f'../pic/img-{n:03d}.jpg')   # 改名時,使用字串格式化的方式進行三位數補零
    n = n + 1    # 每次增加 1
圖示 :

https://ithelp.ithome.com.tw/upload/images/20240813/20168345vYk4nNGkUO.pnghttps://ithelp.ithome.com.tw/upload/images/20240813/20168345FT2tGGSg8y.png

如何批次轉檔

使用 Python 的 glob 標準函式庫,搭配 Pillow 第三方函式庫,實作可以一次將大量的圖片,批次轉檔的功能 ( jpg 轉 png、png 轉 pdf、jpg 轉 gif...等 )

步驟

安裝 pillow
$pip install pillow
步驟 :
  1. 定義輸出目錄:首先定義了一個變數 output_dir,指定了將 PNG 檔案保存到的目錄路徑。這個路徑是相對於當前工作目錄的。
  2. 檢查並創建輸出目錄:使用 os.makedirs(output_dir, exist_ok=True),檢查 output_dir 是否存在。如果不存在,則自動創建該目錄。
  3. 取得所有 JPG 或 JPEG 檔案的路徑:使用 glob.glob('../pic/*.[jJ][pP][gG]'),取了 ../pic/ 目錄下所有jpg檔案的路徑。
  4. 遍歷每個檔案:我們使用 for 迴圈遍歷每個找到的檔案,並在每個迴圈中處理一個檔案。
  5. 開啟圖片檔案:使用 Image.open(i) 方法打開圖片檔案,這會返回一個 Image 物件,用於後續操作。
  6. 取得檔案名稱和副檔名:使用 os.path.splitext(os.path.basename(i)) 來拆分檔名和副檔名。這樣,我們可以得到檔案的純名稱和副檔名。
  7. 檢查副檔名:我們檢查檔案的副檔名是否為 .jpg 或 .jpeg。
  8. 轉換副檔名:將檔案的副檔名從 .jpg 或 .jpeg 轉換為 .png,生成新的檔名。
  9. 結合輸出路徑:使用 os.path.join(output_dir, png),結合成最終的輸出路徑,這樣可以確保路徑是正確的。
  10. 保存 PNG 檔案:最後,使用 im.save(output_path, 'png') 將圖像保存為 PNG 檔案。
程式碼
import glob
from PIL import Image
import os

# 定義要保存 PNG 檔案的目錄
output_dir = '../pic/png'

# 如果目錄不存在,則創建該目錄
os.makedirs(output_dir, exist_ok=True)

# 取得所有圖片檔案
images = glob.glob('../pic/*.[jJ][pP][gG]')
print(images)

for i in images:
    print(i)
    im = Image.open(i)  # 開啟圖片檔案

    # 使用 os.path.basename 來取得檔名,然後拆分出檔名(img-001)與副檔名(.jpg)
    name, ext = os.path.splitext(os.path.basename(i))

    if ext.lower() in ['.jpg', '.jpeg']:  # 檢查副檔名是否為 .jpg 或 .jpeg
        png = f'{name}.png'

        # 使用 os.path.join 	把目錄和檔案名合成一個路徑,確保輸出路徑正確
        output_path = os.path.join(output_dir, png)

        # 轉換成 png 並存檔
        im.save(output_path, 'png')

圖示 :

https://ithelp.ithome.com.tw/upload/images/20240813/20168345b9m3fUAKIV.pnghttps://ithelp.ithome.com.tw/upload/images/20240813/20168345IRkegOTDny.png

參考資料 :
https://steam.oxxostudio.tw/category/python/example/files-rename.html
https://steam.oxxostudio.tw/category/python/library/glob.html
https://steam.oxxostudio.tw/category/python/example/image-conversion.html


上一篇
[Python] QRadioButton 單選按鈕
下一篇
[Python] Socket
系列文
一些Python可以做的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言